草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 用魔数(Magic Number)初始化一 block 内存的简洁方法

我所指的几个例子:typedefstructSOME_STRUCT{unsignedintx1;unsignedintx2;unsignedintx3;unsignedintx4;//WhatIexpectedwouldwork,butdoesn't;the2ndparametergets//turnedintoan8-bitquantityatsomepointwithinmemsetSOME_STRUCT(){memset(this,0xFEEDFACE,sizeof(*this));}//Somethingthatworked,butseemshokey/hackishSOME_

c++类实例内存布局再一次

我知道之前有人问过这个问题,但在你给我一个负号并报告重复的问题之前,请思考一下:在之前的所有回答中,每个人都说对象内存布局取决于编译器。那么,共享库(*.dll、*.so)如何可以导出和导入c++类,即使来自不同的编译器,它们也一定可以组合?考虑在mingw下编写的DirectX应用程序。DirectX是使用MSVC++编译的,那么这些环境如何在内存布局上达成一致?我知道DirectX严重依赖C++类和多态性。以不同的方式提问:假设我选择了一个架构(例如Windows、intelx86)并且我正在尝试编写一个新的编译器。我怎么知道如何访问由另一个编译器编译的.dll库提供的类实例(vt

c++ - 如何处理在 C/C++ 中返回的指向动态内存的指针

我想知道在C和C++中使用指向动态内存的指针处理内存泄漏的协议(protocol)。例如,strtok返回一个char*。据推测,返回的指针最终必须被释放/删除。我注意到referencepage甚至没有提到这一点。那是因为这只是假设吗?另外,你怎么知道是删除还是释放?是否需要研究找出每个函数最初使用的是什么语言,然后假设所有C程序都使用malloc/free而C++使用new/delete? 最佳答案 strtok不会返回指向新分配内存的指针,而是返回指向先前分配的内存位置的指针。让我们假设:charString[1024];st

c++ - 使用 memcpy 复制数组的一部分,以及其他内存操作工具

是否可以使用memcpy复制数组的一部分?例如,我们有一个包含10个整数的数组。我们可以创建一个新数组,并将最后5个整数复制到其中吗?是否有其他可用于c/c++的内存/数组复制/操作工具? 最佳答案 Isitpossibletousememcpytocopypartofanarray?不,一般情况下是不可能的。只有当数组中元素的类型是普通布局时,您才能这样做。Sayforexamplewehaveanarrayof10integers.Canwecreateanewarray,andcopythelast5integersintoi

C++ 内存测试返回奇怪的输出

这里是Slackware。我只是在摆弄内存和指针......我想更多地了解这些,所以我用C++创建了一个数组,并查找了其中第一项的内存地址......:stringfoo[3]={"a","b","c"};cout它输出了这个:http://pastebin.com/K0HAL5nJ完整代码:#includeusingnamespacestd;intmain(){stringfoo[3]={"a","b","c"};cout我是C++的完全初学者,完全不明白为什么会发生这种情况……我知道这种代码不应该……是,但是,有人能解释一下那里发生了什么吗? 最佳答案

c++ - 你如何处理内存管理和信号/插槽?

我有一个对象,它用一个对象发出信号:MyObj*obj=this->generateObj();emitnewObjSignal(obj);deleteobj;我有一个或多个人与此有联系。问题是删除调用在对象接收到信号之前被调用。我该如何处理? 最佳答案 使用智能指针,这样内存管理将自动处理,您将确信您将拥有:没有悬挂指针;没有内存泄漏。在这种情况下,在我看来std::shared_ptr(或std::tr1::shared_ptr或boost::shared_ptr,如果您不使用C++11)是正确的选择:#include//For

c++ - 临时字符串的内存分配

我有一个关于字符串的问题,或者特别是关于字符串使用的内存的问题。我正在使用MSVC2010。考虑这段代码:voidTest(){LPWCSTRString=L"Testing";PrintString(String);}voidPrintString(LPWCSTRString){//printStringtoconsoleorsimilar}以这种方式创建和使用字符串是否安全?当字符串超出范围时,是否释放了为存储字符串分配的内存? 最佳答案 是的,它是安全的,但实际上没有分配;)L"Testing"将保留在您的exe文件的只读部分

c++ - 使用 malloc() 为 const char 字符串动态分配内存

我正在编写一个程序,它从.ini文件中读取一个值,然后将该值传递给一个接受PCSTR(即constchar*)的函数。函数是getaddrinfo()。所以,我想写PCSTRReadFromIni()。要返回常量字符串,我计划使用malloc()分配内存并将内存转换为常量字符串。我将能够获得从.ini文件中读取的确切字符数。这种技术可以吗?我真的不知道还能做什么。以下示例在VisualStudio2013中运行良好,并根据需要打印出“hello”。constchar*m(){char*c=(char*)malloc(6*sizeof(char));c="hello";return(co

c++ - x86、C++、gcc 和内存对齐

我有这个简单的C++代码:inttestFunction(int*input,longlength){intsum=0;for(longi=0;i#includeusingnamespacestd;intmain(){union{int*input;char*cinput;};size_tlength=1024;input=newint[length];//cinput++;cout如果我用带有-O3的g++4.9.2编译它,它运行良好。我预计,如果我取消对倒数第二行的注释,它会运行得更慢,但它会因SIGSEGV而彻底崩溃。ProgramreceivedsignalSIGSEGV,Se

c++ - 删除调用内存集?

为什么在deletethis;之后的调用栈中调用了下面的函数?msvcr110d.dll!_VEC_memset(void*dst,intval,intlen)请注意operatordelete没有重载。 最佳答案 在MicrosoftC/C++运行时库的调试版本中,delete使用memset将释放的内存设置为0xDD。这就是您在调用堆栈中看到memset的原因。您不会在发布版本中看到它。同样,当通过new分配内存时,新分配的内存将设置为0xCD。您可以在此处查看一些详细信息-https://msdn.microsoft.com/